20587
18036
To pytanie ma już odpowiedzi tutaj:
Odwróć ciąg w Pythonie
(29 odpowiedzi)
Zamknięte 4 lata temu.
Próbuję odwrócić ciąg i używając poniższego kodu, ale wynikowa wartość listy odwrotnej jest Brak.
Kod:
str_a = 'To się porusza'
rev_word = str_a.split ()
rev_word = rev_word.reverse ()
rev_word = '' .join (rev_word)
Zwraca TypeError. Czemu? 
.reverse () zwraca None. Dlatego nie powinieneś przypisywać go do zmiennej.
Użyj tego zamiast tego:
stra = 'To jest ciąg'
revword = stra.split ()
revword.reverse ()
revword = ''. join (revword)
Uruchomiłem dla ciebie kod na IDEOne, żebyś mógł zobaczyć wynik. (Zwróć również uwagę, że wynik to stringaisThis; zamiast tego możesz użyć '' .join (revword), ze spacją.)
Zauważ również, że podana metoda odwraca tylko słowa, a nie tekst. @ ron.rothman dostarczył łącze, które szczegółowo opisuje, jak odwrócić cały ciąg.
|
To mój ulubiony sposób odwracania ciągu:
stra = "To jest ciąg znaków"
revword = stra [:: - 1]
print (revword) # "gnirts a si sihT
lub, jeśli chcesz odwrócić kolejność słów:
revword = "" .join (stra.split () [:: - 1])
print (revword) # "string a is This"
:)
|
Różne odwrócenia na strunie:
instring = 'To jest ciąg'
reversestring = instring [:: - 1]
drukuj odwrócony ciąg # gnirts a si sihT
wordsreversed = '' .join (word [:: - 1] for word in instring.split ())
drukuj wordsreversed # sihT si a gnirts
revwordorder = '' .join (słowo w słowo w instring.split () [:: - 1])
print revwordorder # string a is This
revwordandorder = '' .join (słowo [:: - 1] dla słowa w instring.split () [:: - 1])
drukuj revwordandorder # gnirts a si sihT
|
W przyszłości, gdy obiekt ma metodę taką jak [] .reverse (), generalnie wykonuje tę akcję na obiekcie (tj. Lista jest posortowana i nic nie zwraca, None) w przeciwieństwie do wbudowanych funkcji, takich jak sortowane, które wykonują akcję na obiekt i zwraca wartość (tj. posortowaną listę)
|
>>> s = 'to jest ciąg'
>>> s [:: - 1]
„gnirts a si siht”
>>> '' .join (odwrócony (-e))
„gnirts a si siht”
|
Pętla for iteruje ciąg od końca (ostatnia litera) do początku (pierwsza litera)
>>> s = 'Ty też możesz spróbować:]'
>>> rev = ''
>>> for i in range (len (s) - 1, -1, -1):
... rev + = s [i]
>>> rev
']: oot siht yrt nac uoY'
|
Na podstawie komentarzy i innych odpowiedzi:
str_a = 'to jest ciąg'
rev_word = '' .join (odwrócony (str_a.split ()))
W końcu łączenie metod działa w Pythonie ...
|
Listę cofania można wykonać na więcej niż jeden sposób. Jak wspomniano w poprzednich odpowiedziach, dwie są bardzo widoczne, jedna z funkcją reverse () i dwie z funkcją krojenia. Podaję kilka wskazówek, które powinniśmy preferować.
Powinniśmy zawsze używać funkcji reverse () do odwracania listy w Pythonie. Dwa powody, jedno odwrócenie w miejscu i dwa szybsze niż inne.
Mam kilka liczb na poparcie mojej odpowiedzi,
W [15]: len (l)
Wyjście [15]: 1000
W [16]:% timeit -n1 l.reverse ()
1 pętla, najlepsza z 3: 7,87 µs na pętlę
W [17]:% timeit -n1 l [:: - 1]
1 pętla, najlepiej 3:10 µs na pętlę
W przypadku listy 1000 liczb całkowitych funkcja reverse () działała lepiej w porównaniu do wycinania.
|
Nie szukasz odpowiedzi? Przeglądaj inne pytania oznaczone tagiem Python lub zadaj własne pytanie.